//抽象类
//1.DMFrame.java
package edu.neuq.DM;

public abstract class DMFrame {//data mining 框架类
	abstract public void clean();
	abstract public void train();
	abstract public void test();
	public void t(){
	};
}
//2.Luncher.java
package edu.neuq.DM;

import java.util.Scanner;

public class Luncher {
	//父类引用，子类实体——继承，上转型对象——接口回调

	public static void main(String[] args)throws Exception {
	//框架:①抽象类 ②反射 ③方法的overriding重写	
		//DMFrame dm=new DMFrame();//抽象类不允许实例化，不允许使用new来创建DMFrame实例
		//没有对dm进行初始化，创建实例
		//继而用反射的方法创建实例
		System.out.println("start frame");
		DMFrame dm;
		Scanner reader=new Scanner(System.in);
		String className=reader.nextLine();//获取一个类名
		Class c=Class.forName(className);//手动指明一个类，要求虚拟机读取字节码
		dm=(DMFrame)c.newInstance();//(父类)obj[自定义子类的实例]--使用上转型对象设置新创建的实例
		if(!(dm instanceof DMFrame))
			return;
		
		//抽象方法，只有名字，没有代码可以调用
		dm.clean();//第一步，清洗
		dm.train();//第二步,训练
		dm.test();//第三步,测试

	}

}
//3.DT.java
package edu.neuq.DM;

final public class DT extends DMFrame {//基于决策树的一系列数据挖掘方法
	//作为抽象类的子类，实现了抽象方法的(方法体)
	@Override
	public void clean() {
		System.out.println("");

	}

	@Override
	public void train() {
		System.out.println("");

	}

	@Override
	public void test() {
		System.out.println("");

	}

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

	}

}
package edu.neuq.DM;

import java.util.Scanner;

public class Luncher {
	//父类引用，子类实体——继承，上转型对象——接口回调

	public static void main(String[] args)throws Exception {
	//框架:①抽象类 ②反射 ③方法的overriding重写	
		//DMFrame dm=new DMFrame();//抽象类不允许实例化，不允许使用new来创建DMFrame实例
		//没有对dm进行初始化，创建实例
		//继而用反射的方法创建实例
		System.out.println("start frame");
		DMFrame dm;
		Scanner reader=new Scanner(System.in);
		String className=reader.nextLine();//获取一个类名
		Class c=Class.forName(className);//手动指明一个类，要求虚拟机读取字节码
		dm=(DMFrame)c.newInstance();//(父类)obj[自定义子类的实例]--使用上转型对象设置新创建的实例
		if(!(dm instanceof DMFrame))
			return;
		
		//抽象方法，只有名字，没有代码可以调用
		dm.clean();//第一步，清洗
		dm.train();//第二步,训练
		dm.test();//第三步,测试

	}

}


//接口
//1.DMFrame.java
package edu.neuq.Inter;

public interface DMFrame {
	//先抽象，再具体
	//抽象的接口，或者抽象类设计好之后，就不要修改了，如果接口一定要修改的话，可以用默认方法
	//代码只添加，不修改
	abstract public void clean();
	abstract public void train();
	abstract public void test();
	default public void t(){
	};
}

//2.Luncher.java
package edu.neuq.Inter;

import java.util.Scanner;

import edu.neuq.战斗机;
import edu.neuq.老虎;
import edu.neuq.Inter.DMFrame;
//抽象类是一个类，是一个概念，一个对象，描述一个实体——接口是用来描述一些行为的，可以用动作来表示

public class Luncher implements DMFrame{

	public static void main(String[] args) throws Exception {//接口回调
		// TODO 自动生成的方法存根
		进攻 attack;//创建一个攻击类型的引用：Object和接口中方法
		
		attack=new 战斗机();//战斗机实现了攻击接口
		attack.普通攻击();//接口回调，可以调用接口定义的抽象方法
		attack.致命一击();
	//	attack.起飞();//接口回调，不能调用接口定义以外的方法，虽然说实例里可能包含这些方法
		attack.hashCode();//但是,object类定义的方法可以调用
		
		attack=new 老虎();//老虎实现了攻击接口
		
	//	attack=new 猴子();//猴子没有实现攻击接口
		
		System.out.println("start frame");
		DMFrame dm;//接口回调
		
		Scanner reader=new Scanner(System.in);
		String className=reader.nextLine();//获取一个类名
		Class c=Class.forName(className);//手动指明一个类，要求虚拟机读取字节码
		dm=(DMFrame)c.newInstance();//(父类)obj[自定义子类的实例]--使用上转型对象设置新创建的实例
		if(!(dm instanceof DMFrame))
			return;
		
		//抽象方法，只有名字，没有代码可以调用
		dm.clean();//第一步，清洗
		dm.train();//第二步,训练
		dm.test();//第三步,测试
		dm.t();
	}

	@Override
	public void clean() {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void train() {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void test() {
		// TODO 自动生成的方法存根
		
	}

}
//3.DT.java
package edu.neuq.Inter;

public class DT implements DMFrame{

	@Override
	public void clean() {
		// TODO 自动生成的方法存根
		System.out.println("来自接口的DT清洗");
	}

	@Override
	public void train() {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void test() {
		// TODO 自动生成的方法存根
		
	}
	public void t(){
		System.out.println("真好");
	}
	

}
